package com.common;

import java.util.List;
import java.util.TimerTask;

import javax.servlet.ServletContext;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;

import com.hibernate.pojo.Product;
import com.spring.service.front.IndexService;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class SearchIndex extends TimerTask{
 
	/**
	 * create index
	 * @throws Exception
	 */
	private ServletContext context = null;
	
	public SearchIndex(ServletContext context)
	{
		this.context=context;
	}
	
	public void run() {
		try
		{
			/* 创建索引初始化，执行这些语句将创建或清空d:\\save\\目录下所有索引 */
			  IndexWriter writer1 = new IndexWriter(Constant.INDEX_PATH,
			    new StandardAnalyzer(), true);
			  writer1.close();

			  /*
			   * 往创建的初始化索引中添加索引内容，StandardAnalyzer表示用lucene自带的标准分词机制，
			   * false表示不覆盖原来该目录的索引，细心的读者可能已经发现， 这句话和上面的那句就这个false不一样
			   */
			  IndexWriter writer2 = new IndexWriter(Constant.INDEX_PATH,
			    new StandardAnalyzer(), false);
			  
			  //搜索数据从database
			  ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
			  IndexService cs = (IndexService) ctx.getBean("indexService");
			  List list =cs.findCorrelation("from Product");
			  //List list=indexService.findCorrelation();
			  System.out.println("一小时索引一次");
			  /* 创建一份文件 */
			  Product product;
			  Document doc1;
			  Field field1,field2,field3;
			  for(int i=0;i<list.size();i++)
			  {
				  product=(Product)list.get(i);
				  doc1 = new Document();
				  /*
				   * 创建一个域ArticleTitle，并往这个域里面添加内容 "Field.Store.YES"表示域里面的内容将被存储到索引
				   * "Field.Index.TOKENIZED"表示域里面的内容将被索引，以便用来搜索
				   */
				  field1 = new Field("ProductTitle", product.getProduct_name(), Field.Store.YES,
				    Field.Index.TOKENIZED);
				  /* 往文件里添加这个域 */
				  doc1.add(field1);
				  /* 同理：创建另外一个域ArticleText，并往这个域里面添加内容 */
				  field2 = new Field("ProductDepict", product.getProduct_depict(),
				    Field.Store.YES, Field.Index.TOKENIZED);
				  doc1.add(field2);
				  field3 = new Field("ProductId", product.getId().toString(),
						    Field.Store.YES, Field.Index.TOKENIZED);
						  doc1.add(field3);
				  // 在这里还可以添加其他域
				  /* 添加这份文件到索引 */
				  writer2.addDocument(doc1);
				  
			  }
			  /* 关闭 */
			  writer2.close();
		 }
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
		  
}
